﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio;
using Business.Entities;
using System.Text.RegularExpressions;

namespace UI.Desktop
{
    public partial class AlumnoDesktop : ApplicationForm
    {
        public Persona per;
        public Persona PersonaActual
        {
             get { return per; }
            set { per = value; }
        }

        public AlumnoDesktop()
        {
            InitializeComponent();
        }

        public override void MapearDeDatos()
        {
            

            this.txtID.Text = this.PersonaActual.ID.ToString();
            this.txtNombre.Text = this.PersonaActual.Nombre;
            this.txtApellido.Text = this.PersonaActual.Apellido;
            this.txtDireccion.Text = this.PersonaActual.Direccion;
            this.txtEmail.Text = this.PersonaActual.Email;
            this.txtTelefono.Text = this.PersonaActual.Telefono;
            this.mskFechanac.Text = this.PersonaActual.Fechanacimiento.ToString();
            this.txtLegajo.Text = this.PersonaActual.Legajo.ToString();
            this.txtPlan.Text = this.PersonaActual.Idplan.ToString();


            if (ModoForm == modoForm.Alta || ModoForm == modoForm.Modificacion)
            {

                this.btnAceptar.Text = "Guardar";
            }
            else
            {
                if (ModoForm == modoForm.Baja)
                {
                    this.txtNombre.Enabled=false;
                    this.txtApellido.Enabled = false;
                    this.txtDireccion.Enabled = false;
                    this.txtEmail.Enabled = false;
                    this.txtTelefono.Enabled = false;
                    this.mskFechanac.Enabled = false;
                    this.txtLegajo.Enabled = false;
                    this.txtPlan.Enabled = false;
                    this.btnAceptar.Text = "Eliminar";

                }
                else
                {
                    if (ModoForm == modoForm.Consulta)
                    {
                        this.btnAceptar.Text = "Aceptar";
                    }

                }

            }

        }

        public override void MapearADatos()
        {
            if (ModoForm == modoForm.Alta)
            {
                Persona pers = new Persona();
                TiposPersonas tp=new TiposPersonas();
                tp.Tipo=TiposPersonas.TipoPer.Alumno;
                pers.Tipopersona = tp;
                PersonaActual = pers;

                this.PersonaActual.State = BussinessEntity.States.New;
                

            }
            if (ModoForm == modoForm.Modificacion)
            {
                this.PersonaActual.ID = Convert.ToInt32(this.txtID.Text);
                this.PersonaActual.State = BussinessEntity.States.Modified;
                TiposPersonas tp = new TiposPersonas();
                tp.Tipo = TiposPersonas.TipoPer.Alumno;
                this.PersonaActual.Tipopersona = tp;
            }

            
            this.PersonaActual.Nombre=this.txtNombre.Text;
            this.PersonaActual.Apellido=this.txtApellido.Text;
            this.PersonaActual.Direccion = this.txtDireccion.Text;
            this.PersonaActual.Email=this.txtEmail.Text;
            this.PersonaActual.Telefono = this.txtTelefono.Text;
            this.PersonaActual.Fechanacimiento=DateTime.Parse(this.mskFechanac.Text);
            this.PersonaActual.Legajo=Int32.Parse(this.txtLegajo.Text);
            this.PersonaActual.Idplan = Int32.Parse(this.txtPlan.Text);
            
            
           
        }

        public AlumnoDesktop(modoForm modo)
        {
            InitializeComponent();
           ModoForm=modo;
           
                       
        }

        public AlumnoDesktop(int ID, modoForm modo) 
        {
            InitializeComponent();
            ModoForm = modo;
            PersonaLogic prl = new PersonaLogic();
            PersonaActual = prl.getOne(ID);
            
            this.MapearDeDatos();

        }

        private Boolean emailvalidar(String email)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        public override void GuardarCambios()
        {
            this.MapearADatos();
            PersonaLogic pl = new PersonaLogic();
            if (ModoForm == modoForm.Baja)
            {
                PersonaActual.State = BussinessEntity.States.Deleted;
                pl.delete(PersonaActual.ID);


            }
            pl.save(PersonaActual);

        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.Validar())
            {
                this.GuardarCambios();
                Close();
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        public override bool Validar()
        {

            if (this.txtNombre.Text == "" || this.txtApellido.Text == "" || this.mskFechanac.Text == "" || this.txtPlan.Text == "")
            {

                this.Notificar("Error", "Rellenar los campos requeridos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;

            }
            
            else if (!this.emailvalidar(this.txtEmail.Text))
            {
                this.Notificar("Error", "Email Invalido", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            else
            {
                return true;

            }

        }








    }
}
